﻿using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using DevExpress.XtraReports.UI;
using System.Collections.Generic;
using ThanNhanTao.Server.Entities;
using ThanNhanTao.Server;
using ThanNhanTao.Server.Enum;
using ThanNhanTao.ListTemp;
using ThanNhanTao.Server.BLL;

namespace ThanNhanTao.Report
{
    public partial class rptPhieuThanhToanNgoaiTruTheoThangMain : DevExpress.XtraReports.UI.XtraReport
    {
        #region Fields

        int stt;
        List<PhieuThanhToanNoiTruEntities> listPhieuThanhToanEntities;
        int soDongThemTrongDanhMucThuoc = 0; 
        int soDongThemNgoaiDanhMucThuoc = 0;

        #endregion

        public rptPhieuThanhToanNgoaiTruTheoThangMain(List<PhieuThanhToanNoiTruEntities> listPhieuThanhToanEntities, int soDongThemTrongDanhMucThuoc, int soDongThemNgoaiDanhMucThuoc)
        {
            InitializeComponent();
            this.listPhieuThanhToanEntities = listPhieuThanhToanEntities;
            this.soDongThemTrongDanhMucThuoc = soDongThemTrongDanhMucThuoc;
            this.soDongThemNgoaiDanhMucThuoc = soDongThemNgoaiDanhMucThuoc;
        }

        public void BindReportHeader(BenhNhan benhNhan, DateTime? ngayDenKham, DateTime? ngayKetThuc,int tongSoNgayDieuTri)
        {
            xrSoKhamBenh.Text = benhNhan.SoNhapVien;
            xrMaSoNguoiBenh.Text = benhNhan.IdBenhNhan.ToString();
            xrHoTen.Text = benhNhan.Ho + " " + benhNhan.Ten;
            if (!string.IsNullOrEmpty(benhNhan.NoiGioiThieu))
                xrNoiChuyenDen.Text = benhNhan.NoiGioiThieu;
            xrNgaySinh.Text = ".........../.........../ " + (DateTime.Now.Year - (int)benhNhan.Tuoi).ToString();
            if (ngayDenKham != null)
                xrNgayDenKham.Text = string.Format("...................giờ..........ngày {0}", ngayDenKham.Value.ToString("dd/MM/yyyy"));
            if (ngayKetThuc != null)
                xrKetThucDieuTruNgoaiTru.Text = string.Format(".............giờ.............ngày {0}", ngayKetThuc.Value.ToString("dd/MM/yyyy"));
            //if (tongSoNgayDieuTri != 0)
            //    xrTongSoNgayDieuTri.Text = tongSoNgayDieuTri.ToString();
            //xrNgaySinh.Text =
            if (benhNhan.GioiTinh)
                xrNam.Text = "X";
            else
                xrNu.Text = "X";
            xrDiaChi.Text = benhNhan.DiaChi;
            if(!benhNhan.LaBHYT)
                xrKhongCoBHYT.Text = "X";
            else
            {
                xrCoBHYT.Text = "X";
                xrGiaTriTuDen.Text = string.Format("từ {0} đến {1}", benhNhan.TuNgay.Value.ToString("dd/MM/yyyy")
                                                                   , benhNhan.DenNgay.Value.ToString("dd/MM/yyyy"));
                if(!string.IsNullOrEmpty(benhNhan.SoBHYT))
                {
                    string soBHYT = benhNhan.SoBHYT;
                    xrMaTheBHYT1.Text = soBHYT.Substring(0, 2);
                    xrMaTheBHYT2.Text = soBHYT.Substring(2, 1);
                    xrMaTheBHYT3.Text = soBHYT.Substring(3, 2);
                    xrMaTheBHYT4.Text = soBHYT.Substring(5, 2);
                    xrMaTheBHYT5.Text = soBHYT.Substring(7, 3);
                    xrMaTheBHYT6.Text = soBHYT.Substring(10, 5);
                    if (soBHYT.IndexOf("-") > 0)
                    {
                        string maBV = soBHYT.Substring(soBHYT.IndexOf("-") + 1);
                        xrMaSoCoSoDangKyKCBBHYT.Text = maBV;
                        Dm_BenhVien noiDKBD = new Dm_BenhVienBLL().RetrieveBenhVienByMaBV(maBV);
                        if (noiDKBD != null)
                            xrCoSoDangKyKCBBanDau.Text = noiDKBD.TenBV;
                    }
                }
            }

            if (benhNhan.Dm_ChanDoan != null)
            {
                xrChanDoan.Text = benhNhan.Dm_ChanDoan.TenChanDoan;
                xrMaBenh.Text = benhNhan.MaChanDoan;
            }
        }

        public void BindReportFooter(DateTime? ngayThanhToan)
        {
            if (ngayThanhToan.HasValue)
                xrNgayKhamBenh.Text = String.Format("Ngày {0} tháng {1} năm {2}", ngayThanhToan.Value.ToString("dd")
                                                                                , ngayThanhToan.Value.ToString("MM")
                                                                                , ngayThanhToan.Value.ToString("yyyy"));
            else
                xrNgayKhamBenh.Text = "Ngày.......tháng........năm........";
            //xrNgayKhamBenh.Text = String.Format("Ngày  {0}  tháng  {1}  năm  {2}", ngayYeuCau.Day, ngayYeuCau.Month, ngayYeuCau.Year);
            //xrNgayGiamDinh.Text = String.Format("Ngày  {0}  tháng  {1}  năm  {2}", ngayYeuCau.Day, ngayYeuCau.Month, ngayYeuCau.Year);
        }

        public void BindDetail()
        {
            colTenLoaiYeuCau.DataBindings.Add("Text", DataSource, "TenLoaiYeuCau");
            colDetailThanhTien.DataBindings.Add("Text", DataSource, "CongThanhTienString");
        }

        public void BindGroupFooter(decimal tongCongThanhTien, decimal tongCongQuyBHYT, decimal tongCongKhac, decimal tongCongNguoiBenh,int soDongDuLieu)
        {
            if (soDongDuLieu > 0) //Nếu có dữ liệu thì mới in ra các ô tổng cộng tiền
            {
                colTongCongThanhTien.Text = tongCongThanhTien.ToString("#,##0");
                //colTongCongQuyBHYT.Text = tongCongQuyBHYT.ToString();
                //colTongCongKhac.Text = tongCongKhac.ToString();
                //colTongCongNguoiBenh.Text = tongCongNguoiBenh.ToString();
            }
        }

        private void Detail_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e)
        {
            string maLoaiYeuCau = string.Empty;
            if(this.GetCurrentColumnValue("MaLoaiYeuCau") != null)
                maLoaiYeuCau = GetCurrentColumnValue("MaLoaiYeuCau").ToString();
            int congSoLuong = 0;
            if (this.GetCurrentColumnValue("CongSoLuong") != null)
                congSoLuong = (int)GetCurrentColumnValue("CongSoLuong");

            stt++;
            colSTT.Text = stt + ".";
            if (maLoaiYeuCau.Equals(EnumMaLoaiYeuCau.DichVuKTCChiPhiLon))
                colDetailSttTong.Text = string.Format("{0} {1}", stt.ToString(), "(" + congSoLuong + ")");
            else
                colDetailSttTong.Text = stt.ToString();
            int soDongInPhieu = 0;
            if (this.GetCurrentColumnValue("SoDongInPhieu") != null)
                soDongInPhieu = Convert.ToInt32(GetCurrentColumnValue("SoDongInPhieu"));
            List<PhieuThanhToanNoiTruEntities> listThanhToanTheoLoai = listPhieuThanhToanEntities.FindAll(u => u.MaLoaiYeuCau == maLoaiYeuCau);
            if (maLoaiYeuCau == EnumMaLoaiYeuCau.ThuocDichTruyen || maLoaiYeuCau == EnumMaLoaiYeuCau.VatTuTieuHao) 
            {
                if (maLoaiYeuCau == EnumMaLoaiYeuCau.ThuocDichTruyen)
                {
                    for (int i = 0; i < soDongThemTrongDanhMucThuoc - 1; i++)
                    {
                        listThanhToanTheoLoai.Add(new PhieuThanhToanNoiTruEntities
                        {
                            MaLoaiYeuCau = maLoaiYeuCau,
                            TenLoaiYeuCau = "",
                            TenYeuCauChayThan = "",
                            PhanLoaiBHYT = (byte)0
                        });
                    }
                    for (int i = 0; i < soDongThemNgoaiDanhMucThuoc - 1; i++)
                    {
                        listThanhToanTheoLoai.Add(new PhieuThanhToanNoiTruEntities
                        {
                            MaLoaiYeuCau = maLoaiYeuCau,
                            TenLoaiYeuCau = "",
                            TenYeuCauChayThan = "",
                            PhanLoaiBHYT = (byte)1
                        });
                    }
                }
                rptPhieuThanhToanNgoaiTruTheoThangDetailPhanLoaiBHYT detailThuocDichTruyen = new rptPhieuThanhToanNgoaiTruTheoThangDetailPhanLoaiBHYT(listThanhToanTheoLoai, soDongInPhieu);
                xrSubreportDetail.ReportSource = detailThuocDichTruyen;
                rptPhieuThanhToanNgoaiTruTheoThangDetailPhanLoaiBHYT reportDetailThuocDT = (rptPhieuThanhToanNgoaiTruTheoThangDetailPhanLoaiBHYT)xrSubreportDetail.ReportSource;
                reportDetailThuocDT.DataSource = CreateListPhanLoaiTrongYeuCau(maLoaiYeuCau); //Bind danh sách loại yêu cầu
                reportDetailThuocDT.BindPhanLoai(stt + "."); //thiết lập hiển thị
            }
            else
            {
                //Add số dòng trống vào dữ liệu
                for (int i = 0; i < soDongInPhieu - 1; i++)
                {
                    listThanhToanTheoLoai.Add(new PhieuThanhToanNoiTruEntities
                    {
                        MaLoaiYeuCau = maLoaiYeuCau,
                        TenLoaiYeuCau = "",
                        TenYeuCauChayThan = ""
                    });
                }
                rptPhieuThanhToanNgoaiTruTheoThangDetail detail = new rptPhieuThanhToanNgoaiTruTheoThangDetail();
                xrSubreportDetail.ReportSource = detail;
                rptPhieuThanhToanNgoaiTruTheoThangDetail reportDetail = (rptPhieuThanhToanNgoaiTruTheoThangDetail)xrSubreportDetail.ReportSource;
                reportDetail.DataSource = listThanhToanTheoLoai;
                reportDetail.BindData();
            }
        }

        public List<PhanLoaiTrongYeuCau> CreateListPhanLoaiTrongYeuCau(string maLoaiYeuCau)
        {
            List<PhanLoaiTrongYeuCau> listPhanLoaiTrongYeuCau = new List<PhanLoaiTrongYeuCau>();
            PhanLoaiTrongYeuCau phanLoai1 = new PhanLoaiTrongYeuCau
            {
                PhanLoaiBHYT = (byte)0,
                MoTa = "1. Trong danh mục BHYT:"
            };
            listPhanLoaiTrongYeuCau.Add(phanLoai1);
            //PhanLoaiTrongYeuCau phanLoai2 = new PhanLoaiTrongYeuCau
            //{
            //    PhanLoaiBHYT = (byte)1,
            //    MoTa = "2. Ngoài danh mục BHYT:"
            //};
            //listPhanLoaiTrongYeuCau.Add(phanLoai2);
            //if (maLoaiYeuCau == EnumMaLoaiYeuCau.ThuocDichTruyen)
            //{
            //    PhanLoaiTrongYeuCau phanLoai3 = new PhanLoaiTrongYeuCau
            //    {
            //        PhanLoaiBHYT = (byte)2,
            //        MoTa = "3. Thuốc điều trị ung thư, chống thải ghép ngoài danh mục:"
            //    };
            //    listPhanLoaiTrongYeuCau.Add(phanLoai3);
            //}
            return listPhanLoaiTrongYeuCau;
        }
    }

    
}
